package org.stock.agent.client;

import com.dtflys.forest.annotation.BaseURL;
import com.dtflys.forest.annotation.Get;
import com.dtflys.forest.annotation.Header;
import com.dtflys.forest.annotation.Var;
import org.springframework.stereotype.Component;

@BaseURL("http://59.110.14.90:8080")
@Component
public interface StockClient {
    
    /**
     * 获取基础的股票代码和名称，用于后续接口的参数传入
     * @param apiKey API密钥
     * @return 股票列表
     */
    @Get("/client/stock/list?apiKey={apiKey}")
    String getStockList(@Var("apiKey") String apiKey);

    /**
     * 新股日历，按申购日期倒序
     * @param apiKey API密钥
     * @return 新股日历列表
     */
    @Get("/client/stock/new-stock-calendar?apiKey={apiKey}")
    String getNewStockCalendar(@Var("apiKey") String apiKey);

    /**
     * 获取最新分时交易数据
     * @param stockCode 股票代码.市场（如000001.SZ）
     * @param apiKey API密钥
     * @return 最新分时交易数据列表
     */
    @Get("/client/stock/latest-transaction?stockCode={stockCode}&apiKey={apiKey}")
    String getLatestTransaction(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取行情指标数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 行情指标数据列表
     */
    @Get("/client/stock/indicators?stockCode={stockCode}&apiKey={apiKey}")
    String getIndicators(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取股票基础信息
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 股票基础信息
     */
    @Get("/client/stock/basic-info?stockCode={stockCode}&apiKey={apiKey}")
    String getStockBasicInfo(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取历史分时MACD数据
     * @param stockCode 股票代码(如000001.SZ)
     * @param apiKey API密钥
     * @return 历史分时MACD数据列表
     */
    @Get("/client/stock/historical-macd?stockCode={stockCode}&apiKey={apiKey}")
    String getHistoricalMACD(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取历史分时MA数据
     * @param stockCode 股票代码(如000001.SZ)
     * @param apiKey API密钥
     * @return 历史分时MA数据列表
     */
    @Get("/client/stock/historical-ma?stockCode={stockCode}&apiKey={apiKey}")
    String getHistoricalMA(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取历史分时BOLL数据
     * @param stockCode 股票代码(如000001.SZ)
     * @param apiKey API密钥
     * @return 历史分时BOLL数据列表
     */
    @Get("/client/stock/historical-boll?stockCode={stockCode}&apiKey={apiKey}")
    String getHistoricalBOLL(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取历史分时KDJ数据
     * @param stockCode 股票代码(如000001.SZ)
     * @param apiKey API密钥
     * @return 历史分时KDJ数据列表
     */
    @Get("/client/stock/historical-kdj?stockCode={stockCode}&apiKey={apiKey}")
    String getHistoricalKDJ(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取单股实时交易数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 实时交易数据
     */
    @Get("/client/stock/single-stock-realtime?stockCode={stockCode}&apiKey={apiKey}")
    String getSingleStockRealTime(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);
    
    /**
     * 获取券商数据源实时交易数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 券商数据源实时交易数据
     */
    @Get("/client/stock/broker-realtime?stockCode={stockCode}&apiKey={apiKey}")
    String getBrokerRealTime(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);
    
    /**
     * 获取资金流向数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 资金流向数据
     */
    @Get("/client/stock/capital-flow?stockCode={stockCode}&apiKey={apiKey}")
    String getCapitalFlow(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取资产负债表数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 资产负债表数据
     */
    @Get("/client/stock/balance-sheet?stockCode={stockCode}&apiKey={apiKey}")
    String getBalanceSheet(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取利润表数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 利润表数据
     */
    @Get("/client/stock/income-statement?stockCode={stockCode}&apiKey={apiKey}")
    String getIncomeStatement(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取现金流量表数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 现金流量表数据
     */
    @Get("/client/stock/cash-flow-statement?stockCode={stockCode}&apiKey={apiKey}")
    String getCashFlowStatement(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取财务主要指标数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 财务主要指标数据
     */
    @Get("/client/stock/financial-main-index?stockCode={stockCode}&apiKey={apiKey}")
    String getFinancialMainIndex(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取公司股本表数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 公司股本表数据
     */
    @Get("/client/stock/company-capital?stockCode={stockCode}&apiKey={apiKey}")
    String getCompanyCapital(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取公司十大股东数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 公司十大股东数据
     */
    @Get("/client/stock/top-shareholders?stockCode={stockCode}&apiKey={apiKey}")
    String getTopShareholders(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取公司十大流通股东数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 公司十大流通股东数据
     */
    @Get("/client/stock/top-circulating-shareholders?stockCode={stockCode}&apiKey={apiKey}")
    String getTopCirculatingShareholders(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取公司股东数数据
     * @param stockCode 股票代码（如000001.SZ）
     * @param apiKey API密钥
     * @return 公司股东数数据
     */
    @Get("/client/stock/shareholder-numbers?stockCode={stockCode}&apiKey={apiKey}")
    String getShareholderNumbers(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取近年分红数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 近年分红数据
     */
    @Get("/client/stock/recent-dividends?stockCode={stockCode}&apiKey={apiKey}")
    String getRecentDividends(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取近年增发数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 近年增发数据
     */
    @Get("/client/stock/recent-offerings?stockCode={stockCode}&apiKey={apiKey}")
    String getRecentOfferings(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取解禁限售数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 解禁限售数据
     */
    @Get("/client/stock/restricted-stock-unlock?stockCode={stockCode}&apiKey={apiKey}")
    String getRestrictedStockUnlock(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取近一年各季度利润数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 近一年各季度利润数据
     */
    @Get("/client/stock/quarterly-profit?stockCode={stockCode}&apiKey={apiKey}")
    String getQuarterlyProfit(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取近一年各季度现金流数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 近一年各季度现金流数据
     */
    @Get("/client/stock/quarterly-cash-flow?stockCode={stockCode}&apiKey={apiKey}")
    String getQuarterlyCashFlow(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取近年业绩预告数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 近年业绩预告数据
     */
    @Get("/client/stock/performance-forecast?stockCode={stockCode}&apiKey={apiKey}")
    String getPerformanceForecast(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);

    /**
     * 获取财务指标数据
     * @param stockCode 股票代码（如000001）
     * @param apiKey API密钥
     * @return 财务指标数据
     */
    @Get("/client/stock/financial-indicators?stockCode={stockCode}&apiKey={apiKey}")
    String getFinancialIndicators(@Var("stockCode") String stockCode, @Var("apiKey") String apiKey);
}